# 14.1 极速升级

# 一、jfinal 3.0 之前版本的升级

jfinal 3.0 是大版本升级,此前版本升到 jfinal 3.0 请移步 14.2、14.3、14.4、14.5 小节,这几个小节中的内容极少,升级很方便。

# 二、jfinal 3.0 之后版本的升级

# 1、升级到 3.1

无需修改,平滑升级

# 2、升级到 3.2

IStringSource 更名为 ISource

按照 14.2 小节 升级 Ret

# 3、升级到 3.3

指令扩展中的 java.io.Writer 改为 com.jfinal.template.io.Writer,eclipse/IDEA 开发工具会主动给出提示

# 4、升级到 3.4

由于 Json 中的 defaultDatePattern 初始值由 null 改为 "yyyy-MM-dd HH:mm:ss",JFinalJson 中删掉 datePattern 属性,所以要在 configConstant(Constants me) 中配置:me.setJsonDatePattern(null) 或者具体值

# 5、升级到 3.5

ISource.getKey() 更名为 ISource.getCacheKey()

# 6、升级到 3.6

Db、Model 针对多主键(联合主键)的 findById、deleteById 方法添加一个 's' 后缀,改成 findByIds、deleteByIds

用到 jfinal weixin 项目的 MsgController 时,需要在 configRoutes 中配置 me.setMappingSuperClass(true)

由于 jfinal 3.6 用于 sql 管理的 Engine 对象,默认配置了 engine.setToClassPathSourceFactory(),engine 将从 class path 和 jar 包中加载 sql 文件,所以如果 sql 文件以往是存放在 src/main/webapp 的需要转移至 src/main/resources 之下。如果以往配置过 arp.setBaseSqlTemplatePath(...),需要删除该行代码,或改为适应于 ClassPathSourceFactory 的配置,参考:https://www.jfinal.com/doc/6-2

# 7、升级到 3.8

用到 Aop 配置方法的改为使用 AopManager,例如:Aop.addMapping(...) 改为 AopManager.me().addMapping(...)

# 8、升级到 4.0

无需修改,平滑升级

# 9、升级到 4.1

无需修改,平滑升级

# 10、升级到 4.2

无需修改,平滑升级

# 11、升级到 4.3

无需修改,平滑升级

# 12、升级到 4.4

无需修改,平滑升级

# 13、升级到 4.5

默认不支持直接访问 .jsp 文件,如果需要直接访问 .jsp 文件,需添加配置:me.setDenyAccessJsp(false);

# 14、升级到 4.6

无需修改,平滑升级

# 15、升级到 4.7

无需修改,平滑升级

# 16、升级到 4.8

jfinal 4.8 之前的 Controller.getPara(String) 方法,在有表单域存在的时候就不可能返回 null 值,而是返回了 "" 值。jfinal 4.8 版本将之修改为与其它 getXxx 系方法一样,将 "" 处理为 null 值。

需要快速升级老项目的同学,可以引入 BaseController 并使用老版本的实现

public class BaseController extends Controller {
   public String getPara(String name) {
      return getRequest().getParameter(name);
   }
}
1
2
3
4
5

这个方法的具体改变细节见 gitee.com : https://gitee.com/jfinal/jfinal/commit/edfcc0015837ab0b1e6a1f980843ab88815ec1cd

# 17、升级到 4.9

jfinal 4.9 对 JFinalJson.java 进行了重构,如果以前的项目通过继承 JFinalJson 类做过扩展,需要注意扩展接口有所变动,具体可以参考一下源码中有关扩展的注释,新的扩展接口使用起来比以前要方便得多。

如果项目中使用了 fastjson,最低需要版本为 1.2.68(老版本的 fastjson 有安全隐患)。

如无上述情况可平滑升级。

# 17、升级到 4.9.01

无需修改,平滑升级

# 18、升级到 4.9.02

Engine 的 setWriterBufferSize(int) 更名为 setBufferSize(int)

# 19、升级到 4.9.03

无需修改,平滑升级

# 20、升级到 4.9.04

无需修改,平滑升级。该版本只修正了 com.jfinal.plugin.redis.Cache.hgetCounter(...) 中的一个 bug。

# 21、升级到 4.9.05

无需修改,平滑升级。该版本在 Model、Db 中新增了一个 each 方法,新增方法不影响升级

# 22、升级到 4.9.06

该版本的 MetaBuilder.filter(...) 方法更名为 skip,使用逻辑没有变化。一般很少人用到这个方法,只有用到过这个方法的人才需要修改代码,并且 eclipse、IDEA 开发工具会提示修改。

# 23、升级到 4.9.07

无需修改,平滑升级

# 24、升级到 4.9.08

无需修改,平滑升级

# 25、升级到 4.9.09

无需修改,平滑升级

# 26、升级到 4.9.10

无需修改,平滑升级

# 27、升级到 4.9.11

无需修改,平滑升级

# 28、升级到 4.9.12

不要使用这个版本,模板生成内容会多出一些空行,请使用后续版本

# 29、升级到 4.9.13

无需修改,平滑升级。

但要注意:由于 PathKit.getWebRootPath() 方法已经被改进,在标准的 maven 项目中已经可以正确获取到 web 根目录,所以将该方法用于 model、base model 生成器的代码注意要改一下,可以将 PathKit.getWebRootPath() 改成下面方式获取项目根目录:

System.getProperty("user.dir")
1

# 30、升级到 4.9.14

无需修改,平滑升级

# 31、升级到 4.9.15

无需修改,平滑升级。注意跨多版本升级要看看升级到 4.9.13 这一小节。

# 32、升级到 4.9.16

由于该版本升级了 Redis 插件所依赖的 jedis 与 fst,而 jedis 的 SafeEncoder 移动了目录,所以如果用到了 jfinal 的 Redis 插件的项目,需要将其 jedis 依赖升级到 3.6.3。

如果你想升级 fst,需要注意升级前存入 redis 中的数据无法被读取,因为新版本 fst 序列化/反序列算法不兼容老版本,简单的解决办法是清空 redis 数据重新写入,如果不方便清空可以先不升级 fst 而只升级 jedis。

# 33、升级到 4.9.17

无需修改,平滑升级。

# 34、升级到 4.9.18

如果用到文件上传 cos 依赖必须升级到 2022.2 版本,因为 getFile 方法的 int maxPostSize 改成了 long。不建议使用该版本,建议至少升级到 4.9.21。

注意:从本版本开始,后续版本文件上传依赖 cos 都要升级至少到 2022.2 版本(int maxPostSize 变量改为了 long 类型)

# 35、升级到 4.9.19

无需修改,平滑升级。不建议使用该版本,建议至少升级到 4.9.21。

# 36、升级到 4.9.20

Ret.create(Object,Object) 更名为 Ret.of(Object, Object),Ret.ok(Object, Object)、Ret.fail(Object, Object) 已被删除,可以使用 Ret.ok().set(Object, Object)、Ret.fail().set(Object, Object) 替代。不建议使用该版本,建议至少升级到 4.9.21。

# 37、升级到 4.9.21

为保持兼容性,恢复了上一版本 4.9.20 中删掉的 Ret.ok(Object, Object)、Ret.fail(Object, Object) 两个方法。

相对于 4.9.18 以及更早版本,升级到本版本,需要改变的是 Ret.create(key, value) 改为 Ret.of(key, value),以及 cos 升级到 2022.2,其它不用动。

注意:不建议使用 4.9.18、4.9.19、4.9.20,而是直接使用 4.9.21,因为该版本针对前面三个版本进行了完善并且兼容老项目,属于本轮迭代的最终版。

# 38、升级到 5.0.0

无需修改,平滑升级。

# 39、升级到 5.0.1

无需修改,平滑升级。

# 40、升级到 5.0.2

Enjoy 模板引擎的静态方法调用与静态属性访问表达式默认值改为了 "不开启",如果用到这两类表达式,需要通过如下配置开启:

// 以下配置支持静态方法调用表达式:com.jfinal.kit.StrKit::isBlank('abc')
engine.setStaticMethodExpression(true);
 
// 以下配置支持静态属性访问表达式:com.jfinal.core.Constant::JFINAL_VERSION
engine.setStaticFieldExpression(true);
1
2
3
4
5

# 41、升级到 5.0.3

无需修改,平滑升级。

# 42、升级到 5.0.4

无需修改,平滑升级。

# 43、升级到 5.0.5

无需修改,平滑升级。

# 44、升级到 5.0.6

之前 5.0.3 版本 Redis 插件新增的分布式锁 lock(...)、withLock(...) 中的 timeOut 参数单位由 "毫秒" 改为了 "秒"。如果是 5.0.3 之前版本升级不必关心,因为5.0.3版本之前还未提供过这个方法。

# 45、升级到 5.0.7

无需修改,平滑升级。

# 46、升级到 5.0.8

无需修改,平滑升级。

# 47、升级到 5.0.8

无需修改,平滑升级。

# 48、升级到 5.0.9

无需修改,平滑升级。

# 49、升级到 5.1.0

无需修改,平滑升级。

# 50、升级到 5.1.1

无需修改,平滑升级。

# 51、升级到 5.1.2

ScheduledKit 带有 Runnable/Callable 参数的方法其 Runnable/Callable 参数挪到了最后一个位置。

Last Updated: 9/17/2023, 5:25:03 AM